This invention relates, in general, to memory management, and more particularly to a method of managing memory or I/O resources for a Peripheral Component Interface (PCI) bus.
In a bus-based computer system, component boards of the computer system communicate with each other through shared memory or mapped memory. Early bus-based computer systems used fixed memory allocation, which was configured by manually setting jumpers or switches on the component boards. However, this manual configuration produced many errors. Modern bus-based computer systems use a Peripheral Component Interface (PCI) bus that automatically maps memory to the component boards when the computer system is booted-up or turned on. Recently, this automatic memory mapping process has been extended to occur as a result of PCI xe2x80x9chot-plugxe2x80x9d or xe2x80x9chot-swapxe2x80x9d events. Current implementations of this extension use a fixed resource allocation for each pluggable site. Fixed allocations impose severe restrictions on the system.
Accordingly, a need exists for a method of efficiently managing memory for a PCI bus without re-booting the computer system. It is desired for the memory management method to be compatible with different component boards requiring different sized allocations of memory. It is also desired for the memory management method to minimize down time for the computer system so that the system will no longer need to be taken off-line to upgrade, service, or repair different components of the computer system. It is further desired for the memory management method to avoid aging problems, such as the exhaustion of system resources due to memory leaks or fragmentation. Other memory management methods using fixed memory mapping techniques, best fit techniques, best fit with memory compaction techniques, or buddy buffer techniques do not minimize down time for the computer system, do not avoid aging of computer system resources, or do not accommodate computer architecture changes.